Quasar is a popular Vue UI library for developing good looking Vue apps.
In this article, we’ll take a look at how to create Vue apps with the Quasar UI library.
Reverse Infinite Scroll
We can reverse the direction of the infinite scroll with the reverse
prop:
<!DOCTYPE html>
<html>
<head>
<link
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons"
rel="stylesheet"
type="text/css"
/>
<link
href="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.min.css"
rel="stylesheet"
type="text/css"
/>
</head>
<body class="body--dark">
<script src="https://cdn.jsdelivr.net/npm/vue@^2.0.0/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.umd.min.js"></script>
<div id="q-app">
<q-layout
view="lHh Lpr lFf"
container
style="height: 100vh;"
class="shadow-2 rounded-borders"
>
<div class="q-pa-md">
<q-infinite-scroll @load="onLoad" reverse>
<template slot="loading">
<div class="row justify-center q-my-md">
<q-spinner color="primary" name="dots" size="40px" />
</div>
</template>
<div
v-for="(item, index) in items"
:key="index"
class="caption q-py-sm"
>
<q-badge class="shadow-1">
{{ items.length - index }}
</q-badge>
Lorem ipsum
</div>
</q-infinite-scroll>
</div>
</q-layout>
</div>
<script>
new Vue({
el: "#q-app",
data: {
items: [{}, {}, {}, {}, {}, {}, {}]
},
methods: {
onLoad(index, done) {
setTimeout(() => {
if (this.items) {
this.items.push({}, {}, {}, {}, {}, {}, {});
done();
}
}, 2000);
}
}
});
</script>
</body>
</html>
We can also add an infinite scroll container inside menus:
<!DOCTYPE html>
<html>
<head>
<link
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons"
rel="stylesheet"
type="text/css"
/>
<link
href="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.min.css"
rel="stylesheet"
type="text/css"
/>
</head>
<body class="body--dark">
<script src="https://cdn.jsdelivr.net/npm/vue@^2.0.0/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.umd.min.js"></script>
<div id="q-app">
<q-layout
view="lHh Lpr lFf"
container
style="height: 100vh;"
class="shadow-2 rounded-borders"
>
<div class="q-pa-md">
<q-btn color="brown" label="Menu">
<q-menu
anchor="bottom middle"
self="top middle"
:offset="[ 0, 8 ]"
@show="scrollTarget = $refs.scrollTargetRef"
>
<q-item-label header>
Notifications
</q-item-label>
<q-list
ref="scrollTargetRef"
class="scroll"
style="max-height: 230px;"
>
<q-infinite-scroll
@load="onLoad"
:offset="250"
:scroll-target="scrollTarget"
>
<q-item v-for="(item, index) in items" :key="index">
<q-item-section>
{{ index + 1 }}. Lorem ipsum
</q-item-section>
</q-item>
<template v-slot:loading>
<div class="text-center q-my-md">
<q-spinner-dots
color="primary"
size="40px"
></q-spinner-dots>
</div>
</template>
</q-infinite-scroll>
</q-list>
</q-menu>
</q-btn>
</div>
</q-layout>
</div>
<script>
new Vue({
el: "#q-app",
data: {
scrollTarget: undefined,
items: [{}, {}, {}, {}, {}, {}, {}]
},
methods: {
onLoad(index, done) {
if (index > 1) {
setTimeout(() => {
if (this.items) {
this.items.push({}, {}, {}, {}, {}, {}, {});
done();
}
}, 2000);
} else {
setTimeout(() => {
done();
}, 200);
}
}
}
});
</script>
</body>
</html>
We add the q-infinite-scroll
component into the q-list
and the q-list
is inside the q-menu
.
Conclusion
We can add an infinite scrolling container into our Vue app with Quasar.